package com.youbff.task.utils;

import com.youbff.task.constant.Constant;

/**
 * leader工具类
 * @author lixuefeng
 * @email youbff@163.com
 * @time 2018年1月29日 上午11:54:54
 */
public class LeaderUtils {

    /**
     * leader是否存在
     * @author lixuefeng
     * @email youbff@163.com
     * @time 2018年1月29日 下午12:00:15
     * @return
     */
    public static boolean haveLeader(){
        RedisUtil redisUtil = SpringApplicationContextUtils.getBean(RedisUtil.class);
        Boolean result = (Boolean) redisUtil.get(Constant.leader_key);
        return result == null ? false : result;
    }
    
    /**
     * 自己进行选举<br/>
     * 50秒内选举完
     * @author lixuefeng
     * @email youbff@163.com
     * @time 2018年1月30日 下午5:03:15
     * @return true:当前服务器进行选举,false:已经有选举服务器在进行处理
     */
    public static boolean myVoteLeader(){
        RedisUtil redisUtil = SpringApplicationContextUtils.getBean(RedisUtil.class);
        boolean result = redisUtil.setnx(Constant.leader_vote_lock_key, System.currentTimeMillis());
        if(result){
            //如果当前没有leader
            redisUtil.set(Constant.leader_vote_lock_key, System.currentTimeMillis(),50L);
            return true;
        }
        return false;
    }
    
    /**
     * 正在选举中
     * @author lixuefeng
     * @email youbff@163.com
     * @time 2018年1月31日 下午3:27:35
     * @return
     */
    public static boolean isVoteing(){
        RedisUtil redisUtil = SpringApplicationContextUtils.getBean(RedisUtil.class);
        Long result = (Long) redisUtil.get(Constant.leader_vote_lock_key);
        if(null != result){
            return true;
        }
        return false;
    }
}
